package com.cloudsea.yunhaiserver.controller;


import com.cloudsea.yunhaiserver.task.ETLTask;
import com.cloudsea.yunhaiutils.common.ApiResponse;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 【临时测试控制器】
 * 用于手动触发一些后台任务或进行集成测试。
 * 在生产环境上线前，应删除此类。
 */
@RestController
@RequestMapping("/test")
@Hidden // 这个注解非常有用，它会告诉Swagger UI忽略这个控制器，不要显示在API文档中
@Tag(name = "[内部测试] 任务触发器", description = "用于手动触发后台任务")
public class TestController {

    @Autowired
    private ETLTask etlTask;

    /**
     * 手动触发每日ETL（数据提取、转换、加载）任务
     * @return ApiResponse
     */
    @PostMapping("/run-etl")
    @Operation(summary = "手动触发每日ETL任务")
    public ApiResponse<String> runEtlManually() {
        try {
            // 直接调用ETL任务的核心方法
            etlTask.runDailyETL();
            // 成功后返回一个明确的消息
            return ApiResponse.success("ETL任务已成功触发并执行完毕！请检查数据库`sales_analysis`表。", null);
        } catch (Exception e) {
            // 如果任务执行过程中抛出任何异常，我们在这里捕获并返回详细的错误信息
            e.printStackTrace();
            return ApiResponse.fail(500, "ETL任务执行失败: " + e.getMessage());
        }
    }
}